<?php
/**
* @authors darl2ng@gmail.com, ngocanh.ngo@gmail.com
* @version 0.9
* Copyright 2010
* 
* The MIT License
* Copyright (c) 2010 <darl2ng@gmail.com, ngocanh.ngo@gmail.com>
* 
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
* 
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
* 
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
require_once(LOCAL_FOLDER.'/model/Command.php');
require_once(LOCAL_FOLDER.'/model/Call.php');

class Dypax {
	
	var $xajax;
	var $callable_object;
	var $response;
	
	var $commands;
	
	public function __construct($xajax) {
		$this->xajax = $xajax;		
		$this->response = new xajaxResponse();
		$this->callable_object = &$xajax->register(XAJAX_CALLABLE_OBJECT, $this);
		$this->commands=array();		
	}
	
	public function loadXML($path) {	
		$xml = simplexml_load_file($path);
		foreach($xml->commands[0] as $xmlcommand) {
			$command= new Command($xmlcommand);//should be unique
			//we moved the validate to execute so that we can display alert if want to 
			$this->commands[$command->getId()]=$command; //add command to the stack
		}
	}
		
	public function printJavaScriptById($id) {
		$this->buildParameters($id);
		$this->callable_object['execute']->printScript();
	}
	public function execute($id) {
		$command=$this->commands[$id];
		foreach($command->getCalls() as $call) {			
			$call->execute($this->response);
		}
        return $this->response;
	}
	
	private function buildParameters($id) {
		//We can pass any object here using JSON and some string conversion, too.
		$this->callable_object['execute']->setParameter( 0, XAJAX_QUOTED_VALUE, $id);
	}		
//	private function String2Hex($string){
//	    $hex='';
//	    for ($i=0; $i < strlen($string); $i++){
//	        $hex .= dechex(ord($string[$i]));
//	    }
//	    return $hex;
//	}
//	private function Hex2String($hex){
//	    $string='';
//	    for ($i=0; $i < strlen($hex)-1; $i+=2){
//	        $string .= chr(hexdec($hex[$i].$hex[$i+1]));
//	    }
//	    return $string;
//	}
}
?>